import axios from 'axios'
import type { AxiosInstance } from 'axios'
import { ElMessage } from 'element-plus'
import { useAuthStore } from '@/store/auth'
// import { Session } from "@/utils/storage"

/**
 * 手动创建一个axios实例
 */
const request: AxiosInstance = axios.create({
  // 基础url，复制mock创建的服务接口基础路径，发送每个接口，都会带上这个url
  baseURL: import.meta.env.VITE_APP_BASE_API as string,
  timeout: 30000,
  headers: { "Content-Type": "application/json;charset=utf-8" },
});
// console.log('baseURL', import.meta.env.VITE_APP_BASE_API);

/**
 * 请求拦截器
 */
request.interceptors.request.use((config) => {
  // console.log('请求拦截器', config);
  // 发送请求前在请求头加上token令牌
  const authStore = useAuthStore();
  const accessToken = authStore.authToken;
  if (accessToken) {
    // oauth2 请求头带上令牌  Authorization: Bearer xxx
    config.headers.Authorization = 'Bearer ' + accessToken;
  }
  return config;
}, (error) => {
  // 出现异常，则捕获处理（下面是交给调用处的catch)
  ElMessage.error(error);
  return Promise.reject(error);
});

/**
 * 响应拦截器
 */
request.interceptors.response.use(response => {
  // console.log('响应拦截器', response);
  const { data } = response;
  if (data.status === 200) {
    return data;
  }
  // 非正常弹出错误信息
  ElMessage.error(data.msg);

  // 进入调用方catch部分
  return Promise.reject(response);
}, error => {
  // 出现异常，则捕获处理（下面是交给调用处的catch)
  return Promise.reject(error);
});

// 导出axios实例
export default request; 
